package com.spring.redis.operation.service.base;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * redis Operation hash base interface
 *
 * @author zhouyu
 */
public interface HashRedisBaseService {

    /**
     * 存储hash类型的值
     *
     * @param key   hash表的名称
     * @param field field
     * @param value value
     */
    void hSet(String key, String field, Object value);

    /**
     * 批量存储hash类型的值
     *
     * @param key  hash表的名称
     * @param hash hash
     */
    void hMSet(String key, Map<String, Object> hash);

    /**
     * 获取hash类型的值
     *
     * @param key   key
     * @param filed filed
     * @return String
     */
    String hGet(String key, String filed);

    /**
     * 批量获取hash类型的值
     *
     * @param key    key
     * @param fields fields
     * @@return java.util.List<String>
     */
    List<Object> hMGet(String key, String... fields);

    /**
     * 删除hash类型的值
     *
     * @param key    key
     * @param fields fields
     */
    void hDel(String key, Object... fields);

    /**
     * 判断hash表中是否有该项的值
     *
     * @param key  key
     * @param item item
     * @return boolean
     */
    boolean hHasKey(String key, String item);

    /**
     * 获取hash的所有key
     *
     * @param key key
     * @return Set
     */
    Set<String> hKeys(String key);

    /**
     * 获取hash的所有field和value
     *
     * @param key key
     * @return Map
     */
    public Map<String, Object> hGetAll(String key);

    /**
     * 获取hash的所有value
     *
     * @param key key
     * @@return java.util.List<String>
     */
    List<Object> hValues(String key);

    /**
     * hash递增 如果不存在,就会创建一个 并把新增后的值返回
     *
     * @param key  键
     * @param item 项
     * @param by   递增递减值
     * @return long
     */
    long hIncr(String key, String item, long by);

    /**
     * 获取map长度
     * @param key key
     * @return
     */
    long size(String key);

}
